package com.dance.netty.netty.dubbo.common.netty;

import com.dance.netty.netty.dubbo.provider.service.impl.HelloServiceImpl;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

public class NettyServerHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("有人注册");
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        String msgStr = msg.toString();
        System.out.println("哈哈哈哈");
        // 获取客户端发送的数据
        System.out.println("msg is " + msgStr);
        // 客户端在调用服务器的API的时候, 我们可以自定义一个协议
        // 比如我们要求 每次发送消息都必须以固定格式开头 比如
        // 服务名称#方法名称#参数
        // 例如: HelloService#printHello#this is msg
        if(msgStr.startsWith("HelloService#printHello#")){
            // 传入参数的时候 去除协议头
            ctx.writeAndFlush(HelloServiceImpl.getInstance().printHello(msgStr.substring(msgStr.lastIndexOf('#') + 1)));
        }
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();
    }
}
